package com.magic.shop.module;

import cn.hutool.core.io.FileUtil;
import com.magic.shop.util.FileUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.ssssssss.magicapi.core.annotation.MagicModule;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import static cn.dev33.satoken.spring.SpringMVCUtil.getResponse;

/**
 * 原继承接口，实现接口方法
 */
@Component
@Slf4j
@MagicModule("zbFileModule")
public class FileCustomModule  {

    @Value("${fileBasePath}")
    public String fileBasePath;


    //@Override
    public  String uploadImage(@RequestParam("file") MultipartFile file) throws Exception {
        // 判断文件是否为空
        if (file.isEmpty()) {
            return "上传失败";
        }
        //文件类型为
        String contentType = file.getContentType();
        log.info("文件类型为：" + contentType);
//        if (contentType.equals("image/jpeg")) {
//            return "请上传正确格式的文件";
//        }
        // 获取原始文件名
        String fileName = file.getOriginalFilename();
        log.info("上传的文件名为：" + fileName);
        try {
            // 将文件保存到指定位置
            byte[] bytes = file.getBytes();
            log.info("文件大小为：" + bytes.length);
            // TODO: 根据业务需求选择合适的存储方式，比如保存到本地磁盘或云存储
//            获取生成后的文件名
            String s = FileUtils.generateRandomFileName(fileName);
//            将文件保存到指定位置
            File upload = FileUtils.upload(file, fileBasePath, s);

            return upload.getPath();
        } catch (Exception e) {
            e.printStackTrace();
            return "上传失败";
        }

    }

    /**
     * 文件名称
     */
    public String fileLoad(@RequestParam("filename")String filename) throws IOException {
        HttpServletResponse response=getResponse();
        // 文件的存放位置
        String filePath = fileBasePath + filename;
        File file = new File(filePath);
        // 设置响应头，告诉浏览器要下载文件
        // response.setContentType()是设置响应类型的 浏览器读取的是什么文件 依据文件类型，告诉浏览器接下来要做的是什么
        // application/octet-stream  告诉浏览器需要下载二进制流数据（如常见的文件下载）
        response.setContentType("application/octet-stream");
        /**
         * response.setHeader("Content-Disposition", "attachment; filename=" +new String( filename.getBytes("gb2312"), "ISO8859-1" ));
         * 在确保附件文件名都是简体中文字的情况下，那么这个办法确实是最有效的，不用让客户逐个的升级IE。
         * 如果台湾同胞用，把gb2312改成big5就行。但现在的系统通常都加入了 国际化的支持，普遍使用UTF-8。
         * 如果文件名中又有简体中文字，又有繁体中文，还有日文。那么乱码便产生了。另外，在上Firefox (v1.0-en)下载也是乱码。
         */
        response.setHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("gb2312"), "ISO8859-1"));
        //response.getOutputStream()  输出字节流， 客户端会下载字节流并生成文件保存本地
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(FileUtil.readBytes(file));
        outputStream.close();
        return "success";

    }
}
